package com.duyutian.nio.buffer;


import org.junit.Test;

import java.io.*;
import java.nio.ByteBuffer;

/**
 * @author ：weepmoon
 * @date ：Created in 2020/6/1/001 22:40
 * @description：字节缓存测试类
 */
public class ByteBufferTest {

    /**
     * 容量Capacity缓冲区能够容纳的数据元素的最大数量。容量在缓冲区创建时被设定，并且永远不能被改变。(不能被改变的原因也很简单，底层是数组嘛)
     * 上界Limit缓冲区里的数据的总数，代表了当前缓冲区中一共有多少数据。
     * 位置Position下一个要被读或写的元素的位置。
     * Position会自动由相应的 get()和 put( )函数更新。
     * 标记Mark一个备忘位置。用于记录上一次读写的位置。
     * <p>
     * 个人理解:
     * 可理解成读写模式
     * 写(数据写进去): position 作为写到的元素
     * limit是边界的
     * <p>
     * 读(把数据读出来): position 作为读到的元素
     * limit是可以读到的边界
     */
    @Test
    public void d1() {
        // 创建一个缓冲区
        ByteBuffer byteBuffer = ByteBuffer.allocate(1024);

        // 看一下初始时4个核心变量的值
        System.out.println("初始时-->limit--->" + byteBuffer.limit());
        System.out.println("初始时-->position--->" + byteBuffer.position());
        System.out.println("初始时-->capacity--->" + byteBuffer.capacity());
        System.out.println("初始时-->mark--->" + byteBuffer.mark());

        System.out.println("--------------------------------------");

        // 添加一些数据到缓冲区中
        String s = "Java3y";
        byteBuffer.put(s.getBytes());

        // 看一下初始时4个核心变量的值
        System.out.println("put完之后-->limit--->" + byteBuffer.limit());
        System.out.println("put完之后-->position--->" + byteBuffer.position());
        System.out.println("put完之后-->capacity--->" + byteBuffer.capacity());
        System.out.println("put完之后-->mark--->" + byteBuffer.mark());

        //读数据
        //切换读数据
        byteBuffer.flip();
        byte[] bytes = new byte[byteBuffer.limit()];
        byteBuffer.get(bytes);
        System.out.println(new String(bytes));

        //如果还要去拉数据
        byteBuffer.clear();
    }

    @Test
    public void d2() throws IOException {
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(new File("1")));
        bufferedWriter.flush();
        bufferedWriter.close();

        FileReader fileReader = new FileReader(new File("1"));
        fileReader.read();

    }
}
